package com.chaopei.myexercise;

import java.util.ArrayList;
import java.util.List;

/**
 * @Author Corday 天涯
 * @Date 2022/3/14 16:38
 * 在main方法中创建一个线程,线程每隔一定时间(100ms以内)
 * 产生一个0-100之间的随机整数,共产生50个整数,并打印输出,
 * 同时将该整数放到集合中
 */
public class MyRandomThread implements Runnable {
    private  int sum;
    @Override
    public void run() {
        //此处的for是保证线程可以执行多次
        List<Integer> list = new ArrayList<>();
        for (int i = 0; i < 50; i++) {
            int temp = (int) (Math.random() * 100);
            System.out.println("生成："+temp);
            list.add(temp);
            try {
                Thread.sleep(100);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }//for
        //睡眠三秒
        System.out.println("==要眠12秒,早点醒==");
        try {
            Thread.sleep(12000);
        } catch (InterruptedException e) {
            //输出集合中的数据
            System.out.println(list);
        }
        for(Integer it:list){
            sum+=it;
        }
    }
    public  int getSum(){//获取和值
        return this.sum;
    }
}
//创建另一个线程类,输出和值
class  MyDispSum implements  Runnable{
    private MyRandomThread mtr;
    public MyDispSum(MyRandomThread mtr){
        this.mtr = mtr;
    }
    @Override
    public void run() {
        try {
            Thread.sleep(8200);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("另一个线程和值:"+mtr.getSum());
    }
}
//测试一下
class  ExerciseMain{
    public static void main(String[] args) {
        //先创建实现Runnable接口的对象
        MyRandomThread mrt = new MyRandomThread();
        Thread th = new Thread(mrt);
        th.start();
        MyDispSum myDispSum = new MyDispSum(mrt);
        //等待第一个线程th工作完成后,此线程输出结果
        Thread th1 = new Thread(myDispSum);
        th1.start();
        // 在主线程尽快唤醒th线程
        try {
            //确保子线程已执行了睡眠，然后调用interrupt()方
            //法才生效，能够尽早中止子线程的睡眠状态
            Thread.sleep(6000);
            th.interrupt();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }


    }
}